﻿#define _CRT_SECURE_NO_WARNINGS 1

/*猜名次
5位运动员参加了10米台跳水比赛，有人让他们预测比赛结果：
A选手说：B第二，我第三；

B选手说：我第二，E第四；

C选手说：我第一，D第二；

D选手说：C最后，我第三；

E选手说：我第四，A第一；

比赛结束后，每位选手都说对了一半，请编程确定比赛的名次。*/
#include<stdio.h>

int checkData(int* a)
{
	int tmp[6] = { 0 };

	int i = 0;
	for (i = 0; i < 5; i++)
	{
		if (tmp[a[i]])
			return 0;
		tmp[a[i]] = 1;
	}

	return 1;
}

int main()
{
	//1 2 3 4 5分别代表A,B,C,D,E
	int a[5] = { 0 };
	//通过遍历来列出所有可能
	for (a[0] = 1; a[0] <= 5; a[0]++)
	{
		for (a[1] = 1; a[1] <= 5; a[1]++)
		{
			for (a[2] = 1; a[2] <= 5; a[2]++)
			{
				for (a[3] = 1; a[3] <= 5; a[3]++)
				{
					for (a[4] = 1; a[4] <= 5; a[4]++)
					{
						//筛选条件
						if ((a[1] == 2) + (a[0] == 3) == 1 &&
							(a[1] == 2) + (a[4] == 4) == 1 &&
							(a[2] == 1) + (a[3] == 2) == 1 &&
							(a[2] == 5) + (a[3] == 3) == 1 &&
							(a[4] == 4) + (a[0] == 1) == 1 &&
							checkData(a))	//名次不能并列
						{
							for (int i = 0; i < 5; i++)
							{
								printf("%d", a[i]);
							}
							printf("\n");
						}
					}
				}
			}
		}
	}

	return 0;
}
